package com.itheima.ood.inner.demo06;

public class SwimmingDemo01 {

    // 入口
    public static void main(String[] args) {

        // 调用goSwimming这个方法，怎么去调用
        /**
         * 按照我们的想法，那么我们要调用goSwimming这个方法，那么我们就需要去先创建一个Swimming这个对象
         * 但是Swimming是一个接口，我们不能直接通过new关键字创建其对象吧，那么我们就应该去定义一个Swimming
         * 接口的子类，然后去创建对应的子类对象，把子类对象作为参数传递给goSwimming这个方法
         */
        // 创建SwimmingImpl对象
        SwimmingImpl swimmingImpl = new SwimmingImpl() ;

        // 调用goSwimming这个方法
        goSwimming(swimmingImpl);

        /**
         * 我们现在如果我只想去调用一次goSwimming这个方法，按照我们之前的思想，我们就定义了一个Swimming这个接口的子类，但是我们这个子类我们仅仅
         * 使用了一次，那我们觉得就有点浪费了。怎么办呢？我们就可以去使用匿名内部类来完成，因为匿名内部类本质就是一个接口或者一个类的子类对象
         */

        System.out.println("------------------------------------------------------------");

        goSwimming(new Swimming(){

            @Override
            public void swimming() {
                System.out.println("no name Swimming...................");
            }

        });

    }

    // 去游泳
    public static void goSwimming(Swimming swimming) {
        swimming.swimming();
    }


}
